/*
 * @Author: lirl
 * @Date: 2022-07-18 10:15:53
 * @Description: 入口文件
 */
import Vue from 'vue';
import Element from 'element-ui';
import {
  Table,
  SelectIdentity,
  CommonInput,
  SelectOrg,
  BackToBack,
  DocumentTemplate,
  DynamicTable,
  UploadModal,
  DialogTable,
  FormDynamicTable,
  CustomDynamicTable,
  QueryCondition,
  UploadFile,
  // Tinymce,
  // TypeList,
  BtnGroup
} from 'jdf-vue-ui';
import CommonBiz from 'jdf-common-biz';
import elDragDialog from 'jdf-vue-ui/lib/directives/el-drag-dialog';
import store from '@/vuex/store';
import {
  PUBLIC_PATH,
  bizServiceURL,
  companyName,
  aiBaseUrl,
} from '@/api/utils/constants';
import settings from '@/settings/settings';
import '@/assets/style/index.scss';
import './element-variables.scss';
// 引入验证授权模块
import router from './router';
import {
  VxeTable,
  VxeColumn,
} from 'vxe-table'
import {
  VxeUI,
  VxeButton,
} from 'vxe-pc-ui'

// 引入App
import App from './App';

import 'vxe-table/styles/cssvar.scss'
import 'vxe-pc-ui/styles/cssvar.scss'

// 导入vxe-table默认的语言
import zhCN from 'vxe-pc-ui/lib/language/zh-CN'

VxeUI.setI18n('zh-CN', zhCN)
VxeUI.setLanguage('zh-CN')

function lazyVxeUI (app) {
  app.use(VxeButton)
}

function lazyVxeTable (app) {
  app.use(VxeTable)
  app.use(VxeColumn)
}

// 全局变量配置
Vue.config.productionTip = false;
Vue.use(Element);

// Vue.use(Tinymce);
Vue.use(lazyVxeUI)
Vue.use(lazyVxeTable)
Vue.use(Table);
Vue.use(SelectIdentity);
Vue.use(CommonInput);
Vue.use(SelectOrg);
Vue.use(BackToBack);
Vue.use(elDragDialog);
Vue.use(DocumentTemplate);
Vue.use(DynamicTable);
Vue.use(UploadModal);
Vue.use(DialogTable);
Vue.use(FormDynamicTable);
Vue.use(CustomDynamicTable);
Vue.use(QueryCondition);
Vue.use(UploadFile);
// Vue.use(TypeList);
Vue.use(BtnGroup);
Vue.use(CommonBiz, {
  bizUrl: bizServiceURL,
  // 审批意见超过多少个区域时显示折叠按钮
  opinionCollapseNum: 5,
  // 顶级组织有几级
  topOrgLevel: 2,
  // 附件最大允许上传大小
  attachmentUploadMaxSize: 100,
  // 表单中展示的部门、人员之间的分隔符
  inputNamesSeparator: '、',
  // 弹窗统一配置
  dialogAttrs: settings.dialogAttrs,
  // 表单中的起草单位、起草人所属部门code、本部门意见的过滤部门，根据第几级部门过滤，默认-1，倒数第一级
  drafterOrgLevel: -1,
  // 表单中的编号部门代字的部门，根据第几级部门获取，默认-1，倒数第一级
  docNumberDrafterOrgLevel: -1,
  // 维护端不允许编辑的字段
  noEditabledFields: [],
  // 是否待办提交后调用隐藏待办的接口
  hideTaskAfterSubmit: false,
  // 是否在点击已阅后调用隐藏待阅的接口
  hideReadAfterReaded: false,
  // 点击保存退出时，是否回刷待办
  refreshTodoOnClose: false,
  // 是否开启阅读模式
  allowReadMode: 'y',
  // 是否默认展示阅读模式
  defaultReadMode: true,
  // 是否显示表单模板右侧按钮组
  btnGroupVisible: true,
  // 阅读版式下，是否允许编辑
  editInReadMode: 'y',
  // 阅读版式按钮文本
  readModeTitle: '极简模式',
  // 正常版式按钮文本
  docModeTitle: '公文模式',
  // 是否在IE浏览器打开时弹出提示
  showAlertInfoInIE: true,
  // 发送跟踪的阅文是否只显示发送时的待阅
  onlyShowSendRead: true,
});

Vue.prototype.$JDF = {
  // 项目发布地址
  publicPath: PUBLIC_PATH,
  // 业务后台地址
  bizUrl: bizServiceURL,
  AI_BASE_URL: aiBaseUrl,
  // 公司根组织名称
  companyName,
  // dialog公共属性
  dialogAttrs: settings.dialogAttrs,
  // 当决策意见为其它时，决策意见的文本
  otherOpinionText: '其它',
  // 意见区的隐藏已阅，匹配上哪些文字后生效
  hideReadTexts: ['已阅', '已阅。', '已阅知', '已阅知。'],
  // 组织、人员选中后展示时的分隔符
  separator: '、',
  // 常用意见最大长度
  commonOpinionMax: 100,
  // 提交时是否需要二次确认
  neddSecondConfirmOnSubmit: true,
};
Vue.prototype.$EventBus = new Vue();

// window.addEventListener('unhandledrejection', (event) => {
//   event && event.preventDefault();
// });

// 注册全局过滤器

// Object.keys(Filters).forEach(k => Vue.filter(k, Filters[k]));

/* eslint-disable no-new */
/**
 * runtimecompiler： 渲染过程 - template -> ast -> render -> vdom -> UI
 * new Vue({
    el: '#app',
    router,
    store,
    components: { App },
    template: '<App/>'
  });
 * runtimeonly：渲染过程 - render -> vdom -> UI， 性能更高，代码量更少
 * runtime-only 更快的原因：
 *    runtime-only比runtime-compiler更快，因为它省略了vue内部过程中的第一个过程，如果是runtime-compiler那么main.js中就会出现template从
 *    需要过程一导致增加了一个过程，同时增加了大小
 *    而 runtime-only 模式中不是没有写 template，只是把 template 放在了.vue 的文件中了并有一个叫 vue-template-compiler的在开发依赖时
 *    vue文件中的 template 解析成 render 函数了因为是开发依赖，不在最后生产中，所以最后生产出来的运行的代码没有template
 */
new Vue({
  el: '#app',
  router,
  store,
  render: (h) => h(App),
});
